From c6c867acc7159ff578a0d59f34d8fe28ef0cbefc Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Tue, 25 Apr 2006 22:52:49 -0600 Subject: [PATCH] [IA64] Reseve memory of domain0 (fix dom0 boot panic) Our patch fix domain0 boot panic on large memory system. (e.g. amount of installed memory is 16GB) Memory of domain0 is not reserved now. Our patch can make this memory reserved. And we clean up initrd_start of domain0. Signed-off-by: Kouya Shimura Signed-off-by: Akio Takebe --- xen/arch/ia64/linux-xen/setup.c | 8 +++++++- xen/arch/ia64/xen/dom_fw.c | 3 +-- xen/arch/ia64/xen/xensetup.c | 5 +++-- xen/include/asm-ia64/linux-xen/asm/README.origin | 1 + .../asm-ia64/{linux => linux-xen}/asm/meminit.h | 10 ++++++++++ xen/include/asm-ia64/linux/asm/README.origin | 1 - 6 files changed, 22 insertions(+), 6 deletions(-) rename xen/include/asm-ia64/{linux => linux-xen}/asm/meminit.h (92%) diff --git a/xen/arch/ia64/linux-xen/setup.c b/xen/arch/ia64/linux-xen/setup.c index 50854368e5..eb7d7a1d6f 100644 --- a/xen/arch/ia64/linux-xen/setup.c +++ b/xen/arch/ia64/linux-xen/setup.c @@ -235,7 +235,13 @@ reserve_memory (void) #endif n++; -#ifdef CONFIG_BLK_DEV_INITRD +#ifdef XEN + rsvd_region[n].start = (unsigned long) __va(ia64_boot_param->domain_start); + rsvd_region[n].end = (rsvd_region[n].start + ia64_boot_param->domain_size); + n++; +#endif + +#if defined(XEN)||defined(CONFIG_BLK_DEV_INITRD) if (ia64_boot_param->initrd_start) { rsvd_region[n].start = (unsigned long)__va(ia64_boot_param->initrd_start); rsvd_region[n].end = rsvd_region[n].start + ia64_boot_param->initrd_size; diff --git a/xen/arch/ia64/xen/dom_fw.c b/xen/arch/ia64/xen/dom_fw.c index ba21f846c5..7e8c63b1f7 100644 --- a/xen/arch/ia64/xen/dom_fw.c +++ b/xen/arch/ia64/xen/dom_fw.c @@ -1019,8 +1019,7 @@ dom_fw_init (struct domain *d, const char *args, int arglen, char *fw_mem, int f if (d == dom0) { // XXX CONFIG_XEN_IA64_DOM0_VP // initrd_start address is hard coded in start_kernel() - bp->initrd_start = (dom0_start+dom0_size) - - (PAGE_ALIGN(ia64_boot_param->initrd_size) + 4*1024*1024); + bp->initrd_start = ia64_boot_param->initrd_start; bp->initrd_size = ia64_boot_param->initrd_size; } else { diff --git a/xen/arch/ia64/xen/xensetup.c b/xen/arch/ia64/xen/xensetup.c index 39f1919bf5..b2e3c2c79a 100644 --- a/xen/arch/ia64/xen/xensetup.c +++ b/xen/arch/ia64/xen/xensetup.c @@ -279,16 +279,17 @@ void start_kernel(void) memmove(__va(initial_images_start), __va(ia64_boot_param->domain_start), ia64_boot_param->domain_size); -// ia64_boot_param->domain_start = initial_images_start; + ia64_boot_param->domain_start = initial_images_start; printk("ready to move initrd to 0x%lx with len %lx...", initial_images_start+PAGE_ALIGN(ia64_boot_param->domain_size), ia64_boot_param->initrd_size); memmove(__va(initial_images_start+PAGE_ALIGN(ia64_boot_param->domain_size)), - __va(ia64_boot_param->initrd_start), ia64_boot_param->initrd_size); printk("Done\n"); + ia64_boot_param->initrd_start = initial_images_start + + PAGE_ALIGN(ia64_boot_param->domain_size); /* first find highest page frame number */ max_page = 0; diff --git a/xen/include/asm-ia64/linux-xen/asm/README.origin b/xen/include/asm-ia64/linux-xen/asm/README.origin index 0e0771bd4e..8defd25e63 100644 --- a/xen/include/asm-ia64/linux-xen/asm/README.origin +++ b/xen/include/asm-ia64/linux-xen/asm/README.origin @@ -11,6 +11,7 @@ ia64regs.h -> linux/include/asm-ia64/ia64regs.h io.h -> linux/include/asm-ia64/io.h kregs.h -> linux/include/asm-ia64/kregs.h mca_asm.h -> linux/include/asm-ia64/mca_asm.h +meminit.h -> linux/include/asm-ia64/meminit.h page.h -> linux/include/asm-ia64/page.h pal.h -> linux/include/asm-ia64/pal.h pgalloc.h -> linux/include/asm-ia64/pgalloc.h diff --git a/xen/include/asm-ia64/linux/asm/meminit.h b/xen/include/asm-ia64/linux-xen/asm/meminit.h similarity index 92% rename from xen/include/asm-ia64/linux/asm/meminit.h rename to xen/include/asm-ia64/linux-xen/asm/meminit.h index 1590dc65b3..1761d73b4c 100644 --- a/xen/include/asm-ia64/linux/asm/meminit.h +++ b/xen/include/asm-ia64/linux-xen/asm/meminit.h @@ -13,13 +13,23 @@ * Entries defined so far: * - boot param structure itself * - memory map +#ifndef XEN * - initrd (optional) +#endif * - command line string * - kernel code & data +#ifdef XEN + * - dom0 code & data + * - initrd (optional) +#endif * * More could be added if necessary */ +#ifndef XEN #define IA64_MAX_RSVD_REGIONS 5 +#else +#define IA64_MAX_RSVD_REGIONS 6 +#endif struct rsvd_region { unsigned long start; /* virtual address of beginning of element */ diff --git a/xen/include/asm-ia64/linux/asm/README.origin b/xen/include/asm-ia64/linux/asm/README.origin index 784483de58..02fc26e5e0 100644 --- a/xen/include/asm-ia64/linux/asm/README.origin +++ b/xen/include/asm-ia64/linux/asm/README.origin @@ -27,7 +27,6 @@ linkage.h -> linux/include/asm-ia64/linkage.h machvec.h -> linux/include/asm-ia64/machvec.h machvec_hpsim.h -> linux/include/asm-ia64/machvec_hpsim.h mca.h -> linux/include/asm-ia64/mca.h -meminit.h -> linux/include/asm-ia64/meminit.h numa.h -> linux/include/asm-ia64/numa.h numnodes.h -> linux/include/asm-ia64/numnodes.h param.h -> linux/include/asm-ia64/param.h -- 2.30.2